package com.trabalho.manager;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import com.trabalho.service.EditorController;

@SessionScoped
@ManagedBean
public class EditorManager {

	EditorController controller = new EditorController();
	
	private String texto;
	private Map<String, Integer> mapa;
	private String palavra;
	private String velha;
	private String nova;
	private Integer contPalavra;
	
	
//	public void conta(){
//		quant = controller.contador(texto);
//	}
	
	public void contarPalavra(){
		contPalavra = controller.contarPalavra(texto, palavra);
	}
	
	public void gerarEstatisticas(){
		if (texto != null && !texto.equals("")) {
			mapa = controller.contadorPalavras(texto);
		}else {
			mapa = new HashMap<String, Integer>();
		}
	}

	public void replaceAll() {
		if (texto != null && velha != null && nova != null ) {
			texto = controller.replaceAll(texto, velha, nova);
		}
	}
	
	public String getTexto() {
		return texto;
	}

	public void setTexto(String texto) {
		this.texto = texto;
	}
	
	public List<Map.Entry<String, Integer>> getLista() {
	    Set<Map.Entry<String, Integer>> set = getMapa().entrySet();
	    return new ArrayList<Map.Entry<String, Integer>>(set);
	}

	public Integer getQuantidadeDePalavras(){
		return getMapa().entrySet().size();
	}

	public Integer quantidadeDeFrases(){
		if (texto != null && !texto.equals("")) {
			return controller.contadorDeFrase(texto);
		}else {
			return 0;
		}
		
	}

	public String palavraMaisUsada(){
		if (texto != null && !texto.equals("")) {
			return controller.contadorDePalavraMaisUsada(getMapa());
		}else {
			return "";
		}
	}

	public Integer quantidadeDeParagrafos(){
		if (texto != null && !texto.equals("")) {
			return controller.contadorDeParagrafo(texto);
		}else {
			return 0;
		}
	}
	
	public Integer getQuantidadeTotalDePalavras(){
		int total = 0;
		for (Map.Entry<String, Integer> entry : getMapa().entrySet()) {
			total = total + entry.getValue();
		}
		return total;
	}
	
	public Map<String, Integer> getMapa() {
		if (mapa == null) {
			mapa = new HashMap<String, Integer>();
		}
		return mapa;
	}

	public void setMapa(Map<String, Integer> mapa) {
		this.mapa = mapa;
	}

	public String getPalavra() {
		return palavra;
	}

	public void setPalavra(String palavra) {
		this.palavra = palavra;
	}

	public String getVelha() {
		return velha;
	}

	public void setVelha(String velha) {
		this.velha = velha;
	}

	public String getNova() {
		return nova;
	}

	public void setNova(String nova) {
		this.nova = nova;
	}

	public Integer getContPalavra() {
		return contPalavra;
	}

	public void setContPalavra(Integer contPalavra) {
		this.contPalavra = contPalavra;
	}

}